package com.bbs.daoImpl;
import java.util.List;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.bbs.dao.PostDao;
import com.bbs.hibernate.factory.BaseHibernateDAO;
import com.bbs.model.Followcard;
import com.bbs.model.Post;
/**
* @author 张建浩、卜凡、卢静、余莎、姚文娜
* @version 1.0
* 2016年3月17日下午8:22:52
*/
public class PostDaoImpl extends BaseHibernateDAO implements PostDao{
private static final Logger log = LoggerFactory.getLogger(PostDaoImpl.class);
// property constants
public static final String TITLE = "title";
public static final String CARD_CONTENT = "cardContent";
public static final String POST_TYPE = "postType";
public static final String REPLY_NUM = "replyNum";
// public void save(Post transientInstance) {
// log.debug("saving Post instance");
// try {
// Session session = getSession();
// session.save(transientInstance);
//
// log.debug("save successful");
// } catch (RuntimeException re) {
// log.error("save failed", re);
// throw re;
// }
// }
public Post findById(java.lang.Integer id) {
log.debug("getting Post instance with id: " + id);
try {
Session session = getSession();
Post instance = (Post) session.get("com.bbs.model.Post", id);
session.flush();
session.close();
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
public List findByProperty(String propertyName, Object value) {
log.debug("finding Post instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from Post as model where model."
+ propertyName + "= ?";
Session session = getSession();
Query queryObject = session.createQuery(queryString);
queryObject.setParameter(0, value);
List list = queryObject.list();
session.flush();
session.close();
return list;
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}
public List findByTitle(Object title) {
return findByProperty(TITLE, title);
}
public List findByCardContent(Object cardContent) {
return findByProperty(CARD_CONTENT, cardContent);
}
public List findByPostType(Object postType) {
return findByProperty(POST_TYPE, postType);
}
public List findByReplyNum(Object replyNum) {
return findByProperty(REPLY_NUM, replyNum);
}
@Override
public void pushlish(Post post) {
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.save(post);
transaction.commit();
session.flush();
session.close();
}
@Override
public List<Followcard> getFollowCards(int postId,int pageIndex,int pageSize) {
Session session = getSession();
String sql = "from Followcard follow where follow.post.id=?";
Query query = session.createQuery(sql);
query.setInteger(0, postId);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}
@Override
public Post getPostById(int postId){
Session session = getSession();
String sql = "from Post post where post.id=?";
Query query = session.createQuery(sql);
query.setInteger(0, postId);
List<Post> posts = query.list();
session.flush();
session.close();
if (posts != null && posts.size()>0)
return posts.get(0);
return null;
}
public List<Post> search(String keyword){
Session session = getSession();
String sql = "from Post post where post.title like ?";
Query query = session.createQuery(sql);
query.setString(0, '%'+keyword+'%');
List list = query.list();
session.flush();
session.close();
return list;
// Session session = getSession();
// Criteria criteria = session.createCriteria(Post.class);
// criteria.add(Restrictions.like("title",keyword,MatchMode.ANYWHERE));
// List list = criteria.list();
// session.close();
// return list;
}
@Override
public List<Post> getLatestPosts(int pageIndex, int pageSize) {
Session session = getSession();
String sql = "from Post p order by p.sendDate desc";
Query query = session.createQuery(sql);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}
@Override
public List<Post> getHotPosts(int pageIndex, int pageSize) {
Session session = getSession();
String sql = "from Post p order by p.viewNum desc";
Query query = session.createQuery(sql);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}
@Override
public List<Post> getBestPosts(int pageIndex, int pageSize) {
Session session = getSession();
String sql = "from Post p where p.postType = 1 order by p.viewNum desc";
Query query = session.createQuery(sql);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}
public List<Post> getPostByType(int type,int pageIndex,int pageSize){
if (type > 0){
Session session = getSession();
String sql = "from Post post where post.subForum.mainForum.id=?";
Query query = session.createQuery(sql);
query.setInteger(0, type);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}else if (type==-1){
return getLatestPosts(pageIndex, pageSize);
}
else if (type==-2){
return getBestPosts(pageIndex, pageSize);
}else if (type==-3){
return getHotPosts(pageIndex, pageSize);
}
return null;
}
@Override
public List<Post> getPostByUserId(int userId,int pageIndex,int pageSize) {
Session session = getSession();
String sql = "from Post p where p.user.id = ?";
Query query = session.createQuery(sql);
query.setInteger(0, userId);
int startIndex = (pageIndex -1) * pageSize;
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
List list = query.list();
session.flush();
session.close();
return list;
}
@Override
public void autoIncreaseReply(int postId) {
// Session session = getSession();
// String sql = "update Post p set p.replyNum = p.replyNum+1 where p.id = ?";
// Query query = session.createQuery(sql);
// query.setInteger(0, postId);
// int code = query.executeUpdate();
// System.out.println("rows:"+code);
Post post = findById(postId);
post.setReplyNum(post.getReplyNum()+1);
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.update(post);
transaction.commit();
session.flush();
session.clear();
session.close();
}
@Override
public void autoIncreaseViewNum(int postId) {
Post post = findById(postId);
System.out.println("view:"+post.getViewNum());
post.setViewNum(post.getViewNum()+1);
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.update(post);
transaction.commit();
session.flush();
session.close();
}
public void delete(int postId){
Post post = findById(postId);
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.delete(post);
transaction.commit();
session.flush();
session.close();
}
@Override
public void updateType(Integer postId) {
Post post = findById(postId);
post.setPostType(1);
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.update(post);
transaction.commit();
session.flush();
session.close();
}
@Override
public void updatePost(Post post) {
Session session = getSession();
Transaction transaction = session.beginTransaction();
session.update(post);
transaction.commit();
session.close();
}
}